今天來講講Laravel
裡的一些小功能吧!
這篇主要是我當初在練習時因為需要資料庫裡的資料,
又不可能一下子想出這麼資料來提供我練習用,
於是強大的Laravel
也能夠幫助我們面對這個窘境。
這次就用專案的例子來實作給大家看,
確定.env
連接到資料庫後,進入專案資料夾後,終端機輸入
php artisan make:model House -m
上方這串指令來跟大家說明一下,這裡我們會得到兩個.php
檔案,
都是我們等等會用到的,分別是Model
和Table
,
下面是各別名稱及位置
Model
:/app/house.php
Table
:/database/migrations/create_houses_table.php
確定這些檔案都在所屬的資料夾裡後我們先從Table
開始,
設想一下Table
裡需要什麼欄位,下方為Table
原檔畫面
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateHousesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('houses', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('houses');
}
}
up()
和down()
兩個function,這是分別用來幫Table
migrat和rollback的。$table->increments('id');
代表資料成功建立時自動增加id編號。$table->timestamps();
migrate後會看到多了兩個欄位created_at
和updated_at
,這和上述的id一樣都是預設好了,我們不用去做更改。Schema::dropIfExists('houses');
看字面意思就知道如果有houses
的存在就把它drop。我們就把欄位給加在up()的function裡變成下方畫面
public function up()
{
Schema::create('houses', function (Blueprint $table) {
$table->increments('id');
$table->string('city'); //城市
$table->string('district'); //區域
$table->string('kind'); //房型
$table->string('area'); //坪數
$table->integer('pattern'); //房間數
$table->integer('price'); //租金
$table->timestamps();
});
}
輸入完存檔,終端機輸入
php artisan migrate
之後到Model
裡加入$fillable
功能,確保我們欄位的值都能被添加數值進去。
class House extends Model
{
protected $fillable = ['city', 'district', 'kind', 'area', 'pattern', 'price'];
}
接著就輪到本篇主角登場了seeder
,
這功能就是能在我們的資料庫裡去建立多筆假資料,終端機輸入
php artisan make:seeder HousesTableSeeder
檔案位於
seeder
:/database/seeds/HousesTableSeeder.php
在run()的function裡加入假資料的語法
<?php
use Illuminate\Database\Seeder;
class HousesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// 讓`seeder`知道我們要用\Faker\Factory::create()的function
House::truncate();
$faker = \Faker\Factory::create();
// 開始建立欄位所需要的假資料參數到資料庫裡
for ($i = 0; $i < 50; $i++) {
House::create([
'city' => $faker->city,
'district' => $faker->streetName,
'kind' => $faker->cityPrefix,
'area' => $faker->numberBetween($min = 10, $max = 50),
'pattern' => $faker->numberBetween($min = 1, $max = 5),
'price' => $faker->numberBetween($min = 10000, $max = 50000),
]);
}
}
這裡還有個前置作業是為了之後的方便一次就創建所有Table需要的假資料,
我們先到/database/seeds/DatabaseSeeder.php
裡
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(HousesTableSeeder::class);
}
}
語法打完後,終端機輸入
php artisan db:seed
這樣用seeder
創的假資料就在你的資料庫裡了,
本篇介紹到此,下次見~
您好,我依照範例的過程中發現在這段會找不到 House,我想應該是沒有用 use 引入的關係。
於是我自行加入了這段,但仍然無效,請問問題可能是出在哪呢?
use Illuminate\App\House;
看來是漏掉了,一定要加
use App\House;
這樣Laravel才會知道是要使用哪個table,試試看。
那是使用model的路徑,如果加了Illuminate
程式會以為是在這個Illuminate
資料夾裡的App的House.php,但實際上並無名為Illuminate
資料夾的存在。